package queues; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import gui.Gui; public class Scheduler { private Server server0 = new Server(0); private Server server1 = new Server(1); private Server server2 = new Server(2); private Generator generator; private Client client; ScheduledExecutorService executor = Executors.newScheduledThreadPool(3); public Scheduler() { int index = 0; boolean finished = false; long startTime = System.currentTimeMillis(); long endTime = startTime + Gui.getSimulationTime(); generator = new Generator(); server0 = new Server(0); server1 = new Server(1); server2 = new Server(2); executor.execute(server0); executor.execute(server1); executor.execute(server2); server0.addClient(generator.getClient(index)); index++; server1.addClient(generator.getClient(index)); index++; server2.addClient(generator.getClient(index)); index++; while (finished == false) { int min = getMinimum(server0.getNoOfClients(), server1.getNoOfClients(), server2.getNoOfClients()); if (server0.getNoOfClients() == min) { if (server0.capacity() != 0) { client = generator.getClient(index); server0.addClient(client); index++; } ; } else { if (server1.getNoOfClients() == min) { if (server1.capacity() != 0) { client = generator.getClient(index); server1.addClient(client); index++; } } else { if (server2.getNoOfClients() == min) { if (server2.capacity() != 0) { client = generator.getClient(index); server2.addClient(client); index++; } } } } if (server0.hasFinished() == true && server1.hasFinished() == true && server2.hasFinished() == true) { executor.shutdown(); } if (executor.isTerminated() == true || startTime > endTime) finished = true; } Gui.showMessage("Simulation finished"); Gui.showMessage("Server " + 0 + " average waiting time " + server0.getAvgWaitTime() + " average service time " + server0.getAvgServiceTime()); Gui.showMessage("Server " + 1 + " average waiting time " + server1.getAvgWaitTime() + " average service time " + server1.getAvgServiceTime()); Gui.showMessage("Server " + 2 + " average waiting time " + server2.getAvgWaitTime() + " average service time " + server2.getAvgServiceTime()); } public int getMinimum(int a, int b, int c) { int min; if (a <= b) min = a; else min = b; if (c < min) min = c; return min; } }